import java.util.HashMap;

public class code1 {
//    力扣 150 罗马数字转整数

    public int romanToInt(String s) {
        // 这道题目为了方便后续选择对应的罗马数字，可以先通过 哈希 表现将对应的 字符所对应的数字
        HashMap<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);

        // 要解决这道题目，有一个关键的核心
        // 观察示例，需要了解到一点，需要同时对比前后两个字符串，
        // 只要前者大于后者，前者就单独输出。
        // 前者小于后者，前者就需要和后者相加输出

        // 首先定义一个元素，用于存储每次的值
        int nums = 0;
        for(int i = 0; i < s.length(); i++) {
            // 定义一个元素，从 哈希表 中获取当前元素对应的值
            int val = map.get(s.charAt(i));
            // 比较后一个元素的值是否大于当前位置上的值
            // 当然还需要添加一个条件，防止数组越界
            // 这里的两个条件前后顺序还不能反
            if(i < s.length() - 1 && val < map.get(s.charAt(i + 1)) ) {
                // 以 IV 为例子，这里一定会得到 nums 为 -1
                // 但是在下一轮的判断中 V 就会被单独获取
                nums -= val;
            } else {
                // 在这里就会出现 5 - 1 = 4 从而得到正确答案
                nums += val;
            }
        }
        return nums;
    }
}
